Skip to content

chore: add a Claude.md file to help with contributions - #10343

Open
snowystinger wants to merge 3 commits into
mainfrom
add-claudemd
Open

chore: add a Claude.md file to help with contributions#10343
snowystinger wants to merge 3 commits into
mainfrom
add-claudemd

Conversation

@snowystinger

@snowystinger snowystinger commented Jul 20, 2026

Copy link
Copy Markdown
Member

Closes

I mostly had Claude write this file. I dictated that it specifically include the guidelines around writing tests and the repo organisation. The rest and the file's structure are Claude with a little of my editing. I opted for a progressive disclosure pattern and hopefully some ways for other AI to hook in and read the same file. This should make it easier to expand in the future. I also had Claude check me for rules that could be in conflict with each other.

The guidelines around testing are ones that I've found useful in my own work to try to get better test suites out of Claude. Hopefully this will improve contribution quality as well.

✅ Pull Request Checklist:

  • Included link to corresponding React Spectrum GitHub Issue.
  • Added/updated unit tests and storybook for this change (for new code or code which already has tests).
  • Filled out test instructions.
  • Updated documentation (if it already exists for this component).
  • Looked at the Accessibility Practices for this feature - Aria Practices

📝 Test Instructions:

🧢 Your Project:

@rspbot

rspbot commented Jul 20, 2026

Copy link
Copy Markdown

@rspbot

rspbot commented Jul 28, 2026

Copy link
Copy Markdown

@rspbot

rspbot commented Aug 4, 2026

Copy link
Copy Markdown

@rspbot

rspbot commented Aug 4, 2026

Copy link
Copy Markdown
## API Changes

react-aria-components

/react-aria-components:PreviewTrigger

 PreviewTrigger {
   children: ReactNode
-  closeDelay?: number = 200
+  closeDelay?: number = 500
   defaultOpen?: boolean
-  delay?: number = 600
+  delay?: number = 1500
   isDisabled?: boolean
   isOpen?: boolean
   onOpenChange?: (boolean) => void
 }

/react-aria-components:TableLoadMoreItem

 TableLoadMoreItem {
   children?: ReactNode
   className?: string = 'react-aria-TableLoadMoreItem'
-  direction?: 'start' | 'end' = 'end'
   isLoading?: boolean
   onLoadMore?: () => any
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, undefined>
   scrollOffset?: number = 1
 }

/react-aria-components:TokenField

 TokenField <T extends TokenFieldValue = TokenFieldValue> {
   allowsNewlines?: boolean
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   autoFocus?: boolean
   children?: ChildrenOrFunction<TokenFieldRenderProps>
   className?: ClassNameOrFunction<TokenFieldRenderProps> = 'react-aria-TokenField'
   defaultValue?: TokenFieldValue
   isDisabled?: boolean
   isReadOnly?: boolean
   onBlur?: (FocusEvent<Target>) => void
   onChange?: (TokenFieldValue) => void
   onCopy?: ClipboardEventHandler<TokenFieldValue>
   onCut?: ClipboardEventHandler<TokenFieldValue>
   onFocus?: (FocusEvent<Target>) => void
   onFocusChange?: (boolean) => void
-  onKeyDown?: (React.KeyboardEvent<HTMLDivElement>) => void
-  onKeyUp?: (React.KeyboardEvent<HTMLDivElement>) => void
+  onKeyDown?: (KeyboardEvent) => void
+  onKeyUp?: (KeyboardEvent) => void
   onPaste?: ClipboardEventHandler<TokenFieldValue>
   onSubmit?: () => void
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, TokenFieldRenderProps>
   role?: 'textbox' | 'searchbox' | 'combobox' = 'textbox'
   style?: StyleOrFunction<TokenFieldRenderProps>
   value?: TokenFieldValue
 }

/react-aria-components:TokenFieldValue

 TokenFieldValue <T = any> {
-  Direction: any
   caretPosition: Position
   constructor: (readonly Array<TokenFieldSegment<T>>, TokenFieldValueOptions) => void
   delete: (Position, Intl.Segmenter, any, any) => this
   deleteLine: (Position, any, any) => this
   findBoundaryWithSegmenter: (Position, Intl.Segmenter, any) => Position | null
   findLineBoundary: (Position, any) => Position | null
   findText: (Position, any, string | RegExp) => Position | null
   redo: () => this
   replaceRange: (Position, Position, string, any) => this
   replaceRangeWithSegments: (Position, Position, Array<TokenFieldSegment<T>>, any) => this
   segments: readonly Array<TokenFieldSegment<T>>
   slice: (Position, Position) => this
   toString: () => string
   undo: () => this
   withCaretPosition: (Position) => this
 }

/react-aria-components:Virtualizer

 Virtualizer <O> {
   children: ReactNode
   layout: LayoutClass<O> | ILayout<O>
   layoutOptions?: O
-  shouldObserveItemSize?: boolean
 }

/react-aria-components:GridListHeaderProps

-GridListHeaderProps {
-  children?: ReactNode
-  className?: string
-  id?: string
-  render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, undefined>
-  style?: CSSProperties
-}

/react-aria-components:PreviewTriggerProps

 PreviewTriggerProps {
   children: ReactNode
-  closeDelay?: number = 200
+  closeDelay?: number = 500
   defaultOpen?: boolean
-  delay?: number = 600
+  delay?: number = 1500
   isDisabled?: boolean
   isOpen?: boolean
   onOpenChange?: (boolean) => void
 }

/react-aria-components:SelectProps

-SelectProps <M extends SelectionMode = 'single', T = {
-  
-}> {
+SelectProps <M extends SelectionMode = 'single', T> {
   allowsEmptyCollection?: boolean
   aria-describedby?: string
   aria-details?: string
   aria-labelledby?: string
   autoComplete?: string
   autoFocus?: boolean
   children?: ChildrenOrFunction<SelectRenderProps>
   className?: ClassNameOrFunction<SelectRenderProps> = 'react-aria-Select'
   defaultOpen?: boolean
   defaultValue?: ValueType<SelectionMode>
   disabledKeys?: Iterable<Key>
   excludeFromTabOrder?: boolean
   form?: string
   id?: string
   isDisabled?: boolean
   isInvalid?: boolean
   isOpen?: boolean
   isRequired?: boolean
   name?: string
   onBlur?: (FocusEvent<Target>) => void
   onChange?: (ChangeValueType<SelectionMode>) => void
   onFocus?: (FocusEvent<Target>) => void
   onFocusChange?: (boolean) => void
   onKeyDown?: (KeyboardEvent) => void
   onKeyUp?: (KeyboardEvent) => void
   onOpenChange?: (boolean) => void
   placeholder?: string = 'Select an item' (localized)
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, SelectRenderProps>
   selectionMode?: SelectionMode = 'single'
   shouldCloseOnSelect?: boolean
   slot?: string | null
   style?: StyleOrFunction<SelectRenderProps>
   validate?: (ValidationType<SelectionMode>) => ValidationError | boolean | null | undefined
   validationBehavior?: 'native' | 'aria' = 'native'
   value?: ValueType<SelectionMode>
 }

/react-aria-components:TableLoadMoreItemProps

 TableLoadMoreItemProps {
   children?: ReactNode
   className?: string = 'react-aria-TableLoadMoreItem'
-  direction?: 'start' | 'end' = 'end'
   isLoading?: boolean
   onLoadMore?: () => any
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, undefined>
   scrollOffset?: number = 1
 }

/react-aria-components:TokenFieldProps

 TokenFieldProps <T extends TokenFieldValue = TokenFieldValue> {
   allowsNewlines?: boolean
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   autoFocus?: boolean
   children?: ChildrenOrFunction<TokenFieldRenderProps>
   className?: ClassNameOrFunction<TokenFieldRenderProps> = 'react-aria-TokenField'
   defaultValue?: TokenFieldValue
   isDisabled?: boolean
   isReadOnly?: boolean
   onBlur?: (FocusEvent<Target>) => void
   onChange?: (TokenFieldValue) => void
   onCopy?: ClipboardEventHandler<TokenFieldValue>
   onCut?: ClipboardEventHandler<TokenFieldValue>
   onFocus?: (FocusEvent<Target>) => void
   onFocusChange?: (boolean) => void
-  onKeyDown?: (React.KeyboardEvent<HTMLDivElement>) => void
-  onKeyUp?: (React.KeyboardEvent<HTMLDivElement>) => void
+  onKeyDown?: (KeyboardEvent) => void
+  onKeyUp?: (KeyboardEvent) => void
   onPaste?: ClipboardEventHandler<TokenFieldValue>
   onSubmit?: () => void
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, TokenFieldRenderProps>
   role?: 'textbox' | 'searchbox' | 'combobox' = 'textbox'
   style?: StyleOrFunction<TokenFieldRenderProps>
   value?: TokenFieldValue
 }

/react-aria-components:VirtualizerProps

 VirtualizerProps <O> {
   children: ReactNode
   layout: LayoutClass<O> | ILayout<O>
   layoutOptions?: O
-  shouldObserveItemSize?: boolean
 }

@react-aria/calendar

/@react-aria/calendar:useCalendarMonthPicker

-useCalendarMonthPicker {
-  props: CalendarMonthPickerProps
-  state: CalendarState<CalendarSelectionMode> | RangeCalendarState
-  returnVal: undefined
-}

/@react-aria/calendar:useCalendarYearPicker

-useCalendarYearPicker {
-  props: CalendarYearPickerProps
-  state: CalendarState<CalendarSelectionMode> | RangeCalendarState
-  returnVal: undefined
-}

/@react-aria/calendar:CalendarMonthPickerAria

-CalendarMonthPickerAria {
-  aria-label: string
-  items: Array<CalendarMonthPickerItem>
-  onChange: (Key | null) => void
-  value: Key
-}

/@react-aria/calendar:CalendarMonthPickerItem

-CalendarMonthPickerItem {
-  date: CalendarDate
-  formatted: string
-  id: number
-}

/@react-aria/calendar:CalendarMonthPickerProps

-CalendarMonthPickerProps {
-  format?: 'numeric' | '2-digit' | 'long' | 'short' | 'narrow'
-}

/@react-aria/calendar:CalendarYearPickerAria

-CalendarYearPickerAria {
-  aria-label: string
-  items: Array<CalendarYearPickerItem>
-  onChange: (Key | null) => void
-  value: Key
-}

/@react-aria/calendar:CalendarYearPickerItem

-CalendarYearPickerItem {
-  date: CalendarDate
-  formatted: string
-  id: number
-}

/@react-aria/calendar:CalendarYearPickerProps

-CalendarYearPickerProps {
-  format?: CalendarYearPickerFormatOptions
-  visibleYears?: number = 20
-}

@react-aria/utils

/@react-aria/utils:LoadMoreSentinelProps

 LoadMoreSentinelProps {
   collection: Collection<any>
-  direction?: 'start' | 'end' = 'end'
   onLoadMore?: () => any
   scrollOffset?: number = 1
 }

@react-aria/virtualizer

/@react-aria/virtualizer:VirtualizerItem

 VirtualizerItem {
   children: ReactNode
   className?: string
   layoutInfo: LayoutInfo
   parent?: LayoutInfo | null
-  shouldObserveItemSize?: boolean
   style?: CSSProperties
   virtualizer: IVirtualizer
 }

/@react-aria/virtualizer:VirtualizerItemOptions

 VirtualizerItemOptions {
   layoutInfo: LayoutInfo | null
   ref: RefObject<HTMLElement | null>
-  shouldObserveItemSize?: boolean
   virtualizer: IVirtualizer
 }

@react-spectrum/ai

/@react-spectrum/ai:Attachment

 Attachment {
+  allowsArrowNavigation?: boolean
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   children: ReactNode | (AttachmentRenderProps) => ReactNode
   density?: 'compact' | 'regular' | 'spacious' = 'regular'
   download?: boolean | string
+  focusMode?: 'child' | 'row'
   href?: Href
   hrefLang?: string
   id?: Key
   isDisabled?: boolean
-  isInvalid?: boolean
   onAction?: () => void
   onPress?: (PressEvent) => void
   onPressChange?: (boolean) => void
   onPressEnd?: (PressEvent) => void
   onPressUp?: (PressEvent) => void
   ping?: string
   referrerPolicy?: HTMLAttributeReferrerPolicy
   rel?: string
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, TagRenderProps>
   routerOptions?: RouterOptions
   size?: 'XS' | 'S' | 'M' | 'L' | 'XL' = 'M'
   styles?: StyleString
   target?: HTMLAttributeAnchorTarget
   textValue?: string
   uploadProgress?: number
   value?: T
   variant?: 'primary' | 'secondary' | 'tertiary' | 'quiet' = 'primary'
 }

/@react-spectrum/ai:MessageFeedback

 MessageFeedback {
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   defaultValue?: MessageFeedbackValue
   id?: string
   isDisabled?: boolean
   onChange?: (MessageFeedbackValue) => void
-  size?: 'XS' | 'S' | 'M' | 'L' | 'XL' = 'M'
   slot?: string | null
   styles?: StylesPropWithHeight
   thumbDownLabel?: string
   thumbUpLabel?: string
 }

/@react-spectrum/ai:PromptFieldValue

-PromptFieldValue {
-  Direction: any
-  caretPosition: Position
-  constructor: (readonly Array<TokenFieldSegment<T>>, TokenFieldValueOptions) => void
-  delete: (Position, Intl.Segmenter, any, any) => this
-  deleteLine: (Position, any, any) => this
-  endCoalescing: () => void
-  findBoundaryWithSegmenter: (Position, Intl.Segmenter, any) => Position | null
-  findLineBoundary: (Position, any) => Position | null
-  findText: (Position, any, string | RegExp) => Position | null
-  redo: () => this
-  replaceRange: (Position, Position, string, any) => this
-  replaceRangeWithSegments: (Position, Position, Array<TokenFieldSegment<T>>, any) => this
-  segments: readonly Array<TokenFieldSegment<T>>
-  slice: (Position, Position) => this
-  toString: () => string
-  tokenize: (string) => Array<TokenFieldSegment>
-  undo: () => this
-  withCaretPosition: (Position) => this
-}

/@react-spectrum/ai:PromptField

 PromptField {
   acceptedAttachmentTypes?: Array<string>
-  attachments?: Array<PromptFieldAttachment>
-  brandColor?: string
   children: React.ReactNode
-  defaultAttachments?: Array<PromptFieldAttachment>
-  defaultValue?: TokenFieldValue
   isGenerating?: boolean
   onAddAttachments?: (Array<PromptFieldAttachment>) => void
-  onAttachmentsChange?: (Array<PromptFieldAttachment>) => void
-  onChange?: (TokenFieldValue) => void
   onRemoveAttachments?: (Array<PromptFieldAttachment>) => void
   onStop?: () => void
   onSubmit?: (TokenFieldValue, Array<PromptFieldAttachment>) => void
   styles?: StyleString
-  value?: TokenFieldValue
   variant?: 'balanced' | 'prominent' | 'subtle'
 }

/@react-spectrum/ai:PromptTokenField

 PromptTokenField {
   children?: (TokenSegment) => React.ReactElement
   completionTrigger?: RegExp
-  onKeyDown?: (React.KeyboardEvent<HTMLDivElement>) => void
   pixelLoader?: Array<Cell> | Array<Array<Cell>>
   placeholder?: string
   renderCompletions?: (string) => Array<React.ReactNode> | null | Promise<Array<React.ReactNode> | null>
 }

/@react-spectrum/ai:CommandMenuItem

-CommandMenuItem {
-  aria-label?: string
-  children: ReactNode
-  id?: Key
-  isDisabled?: boolean
-  onAction?: () => void
-  onBlur?: (FocusEvent<Target>) => void
-  onFocus?: (FocusEvent<Target>) => void
-  onFocusChange?: (boolean) => void
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  shouldCloseOnSelect?: boolean
-  styles?: StylesProp
-  textValue?: string
-  value?: T
-}

/@react-spectrum/ai:InsertTextMenuItem

-InsertTextMenuItem {
-  aria-label?: string
-  children: ReactNode
-  id?: Key
-  isDisabled?: boolean
-  onAction?: () => void
-  onBlur?: (FocusEvent<Target>) => void
-  onFocus?: (FocusEvent<Target>) => void
-  onFocusChange?: (boolean) => void
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  shouldCloseOnSelect?: boolean
-  styles?: StylesProp
-  textValue?: string
-  value?: T
-}

/@react-spectrum/ai:InsertTokenMenuItem

 InsertTokenMenuItem {
+  UNSAFE_className?: UnsafeClassName
+  UNSAFE_style?: CSSProperties
   aria-label?: string
   children: ReactNode
+  download?: boolean | string
+  href?: Href
+  hrefLang?: string
   id?: Key
   isDisabled?: boolean
   onAction?: () => void
   onBlur?: (FocusEvent<Target>) => void
   onFocus?: (FocusEvent<Target>) => void
   onFocusChange?: (boolean) => void
   onHoverChange?: (boolean) => void
   onHoverEnd?: (HoverEvent) => void
   onHoverStart?: (HoverEvent) => void
   onPress?: (PressEvent) => void
   onPressChange?: (boolean) => void
   onPressEnd?: (PressEvent) => void
   onPressStart?: (PressEvent) => void
   onPressUp?: (PressEvent) => void
+  ping?: string
+  referrerPolicy?: HTMLAttributeReferrerPolicy
+  rel?: string
+  routerOptions?: RouterOptions
   shouldCloseOnSelect?: boolean
   styles?: StylesProp
+  target?: HTMLAttributeAnchorTarget
   textValue?: string
   value?: T
 }

/@react-spectrum/ai:PromptFieldVoiceButton

-PromptFieldVoiceButton {
-  isDisabled?: boolean
-  lang?: string
-  onError?: (VoiceInputErrorCode) => void
-}

/@react-spectrum/ai:ExecutionTrace

-ExecutionTrace {
-  aria-describedby?: string
-  aria-details?: string
-  aria-label?: string
-  aria-labelledby?: string
-  children: ReactNode
-  id?: string
-  styles?: StyleString
-}

/@react-spectrum/ai:ExecutionTraceItem

-ExecutionTraceItem {
-  aria-describedby?: string
-  aria-details?: string
-  aria-label?: string
-  aria-labelledby?: string
-  children: ReactNode
-  detail?: ReactNode
-  icon?: ReactNode
-  id?: string
-  isAlwaysOpen?: boolean
-  styles?: StyleString
-}

/@react-spectrum/ai:ResponseStatus

 ResponseStatus {
   children: ReactNode
   defaultExpanded?: boolean
+  density?: 'compact' | 'regular' | 'spacious' = 'regular'
   id?: Key
   isDisabled?: boolean
   isExpanded?: boolean
+  isLoading?: boolean
   onExpandedChange?: (boolean) => void
+  size?: 'S' | 'M' | 'L' | 'XL' = 'M'
   slot?: string | null
-  status?: 'loading' | 'failed' | 'success' = 'loading'
   styles?: StyleString
 }

/@react-spectrum/ai:Thread

 Thread <T extends {}> {
   aria-label?: string
   aria-labelledby?: string
   children?: ReactNode | (T) => ReactNode
   items?: Iterable<T>
-  scrollEndThreshold?: number = 100
   styles?: StyleString
 }

/@react-spectrum/ai:ThreadItem

 ThreadItem {
   allowsArrowNavigation?: boolean
   children?: ChildrenOrFunction<GridListItemRenderProps>
   focusMode?: 'child' | 'row'
-  id?: Key
   isStreaming?: boolean
   shouldAnnounceOnMount?: boolean
   styles?: StyleString
   textValue?: string

/@react-spectrum/ai:ThreadLoadMoreItem

-ThreadLoadMoreItem {
-  children?: ReactNode
-  className?: string = 'react-aria-GridListLoadMoreItem'
-  isLoading?: boolean
-  onLoadMore?: () => any
-  render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, undefined>
-  scrollOffset?: number = 1
-  style?: CSSProperties
-}

/@react-spectrum/ai:PromptFocusContext

-PromptFocusContext {
-  UNTYPED
-}

/@react-spectrum/ai:TokenFieldValue

 TokenFieldValue <T = any> {
-  Direction: any
   caretPosition: Position
   constructor: (readonly Array<TokenFieldSegment<T>>, TokenFieldValueOptions) => void
   delete: (Position, Intl.Segmenter, any, any) => this
   deleteLine: (Position, any, any) => this
   findBoundaryWithSegmenter: (Position, Intl.Segmenter, any) => Position | null
   findLineBoundary: (Position, any) => Position | null
   findText: (Position, any, string | RegExp) => Position | null
   redo: () => this
   replaceRange: (Position, Position, string, any) => this
   replaceRangeWithSegments: (Position, Position, Array<TokenFieldSegment<T>>, any) => this
   segments: readonly Array<TokenFieldSegment<T>>
   slice: (Position, Position) => this
   toString: () => string
   undo: () => this
   withCaretPosition: (Position) => this
 }

/@react-spectrum/ai:PixelLoader

-PixelLoader {
-  className?: string
-  color?: string = 'currentColor'
-  icon?: Array<Cell> | Array<Array<Cell>>
-  isPlaying?: boolean
-  size?: number
-}

/@react-spectrum/ai:AttachmentProps

 AttachmentProps {
+  allowsArrowNavigation?: boolean
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   children: ReactNode | (AttachmentRenderProps) => ReactNode
   density?: 'compact' | 'regular' | 'spacious' = 'regular'
   download?: boolean | string
+  focusMode?: 'child' | 'row'
   href?: Href
   hrefLang?: string
   id?: Key
   isDisabled?: boolean
-  isInvalid?: boolean
   onAction?: () => void
   onPress?: (PressEvent) => void
   onPressChange?: (boolean) => void
   onPressEnd?: (PressEvent) => void
   onPressUp?: (PressEvent) => void
   ping?: string
   referrerPolicy?: HTMLAttributeReferrerPolicy
   rel?: string
   render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, TagRenderProps>
   routerOptions?: RouterOptions
   size?: 'XS' | 'S' | 'M' | 'L' | 'XL' = 'M'
   styles?: StyleString
   target?: HTMLAttributeAnchorTarget
   textValue?: string
   uploadProgress?: number
   value?: T
   variant?: 'primary' | 'secondary' | 'tertiary' | 'quiet' = 'primary'
 }

/@react-spectrum/ai:PromptFieldProps

 PromptFieldProps {
   acceptedAttachmentTypes?: Array<string>
-  attachments?: Array<PromptFieldAttachment>
-  brandColor?: string
   children: React.ReactNode
-  defaultAttachments?: Array<PromptFieldAttachment>
-  defaultValue?: TokenFieldValue
   isGenerating?: boolean
   onAddAttachments?: (Array<PromptFieldAttachment>) => void
-  onAttachmentsChange?: (Array<PromptFieldAttachment>) => void
-  onChange?: (TokenFieldValue) => void
   onRemoveAttachments?: (Array<PromptFieldAttachment>) => void
   onStop?: () => void
   onSubmit?: (TokenFieldValue, Array<PromptFieldAttachment>) => void
   styles?: StyleString
-  value?: TokenFieldValue
   variant?: 'balanced' | 'prominent' | 'subtle'
 }

/@react-spectrum/ai:PromptTokenFieldProps

 PromptTokenFieldProps {
   children?: (TokenSegment) => React.ReactElement
   completionTrigger?: RegExp
-  onKeyDown?: (React.KeyboardEvent<HTMLDivElement>) => void
   pixelLoader?: Array<Cell> | Array<Array<Cell>>
   placeholder?: string
   renderCompletions?: (string) => Array<React.ReactNode> | null | Promise<Array<React.ReactNode> | null>
 }

/@react-spectrum/ai:PromptTokenFieldPopoverProps

 PromptTokenFieldPopoverProps {
   UNSAFE_className?: UnsafeClassName
   UNSAFE_style?: CSSProperties
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   arrowRef?: RefObject<Element | null>
   boundaryElement?: Element = document.body
   children?: ChildrenOrFunction<PopoverRenderProps>
   containerPadding?: number = 12
   crossOffset?: number = 0
   defaultOpen?: boolean
   filterAnchor?: Position | null
   getTargetRect?: (Element) => DOMRect | null | undefined = target.getBoundingClientRect()
   hideArrow?: boolean = false
   isEntering?: boolean
   isExiting?: boolean
   isFocused?: boolean
   isNonModal?: boolean
   isOpen?: boolean
   items?: Array<React.ReactNode> | null | Promise<Array<React.ReactNode> | null>
   maxHeight?: number
   offset?: number = 8
   onBlurWithin?: (FocusEvent) => void
   onFocusWithin?: (FocusEvent) => void
   onFocusWithinChange?: (boolean) => void
   onOpenChange?: (boolean) => void
   placement?: Placement = 'bottom'
   scrollRef?: RefObject<Element | null> = overlayRef
   shouldFlip?: boolean = true
+  shouldSkipAnimation?: boolean
   size?: 'S' | 'M' | 'L'
   slot?: string | null
   styles?: StyleString
   trigger?: string
 }

/@react-spectrum/ai:PromptFieldVoiceButtonProps

-PromptFieldVoiceButtonProps {
-  isDisabled?: boolean
-  lang?: string
-  onError?: (VoiceInputErrorCode) => void
-}

/@react-spectrum/ai:InsertTokenMenuItemProps

-InsertTokenMenuItemProps {
-  aria-label?: string
-  children: ReactNode
-  id?: Key
-  isDisabled?: boolean
-  onAction?: () => void
-  onBlur?: (FocusEvent<Target>) => void
-  onFocus?: (FocusEvent<Target>) => void
-  onFocusChange?: (boolean) => void
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  shouldCloseOnSelect?: boolean
-  styles?: StylesProp
-  textValue?: string
-  value?: T
-}

/@react-spectrum/ai:InsertTextMenuItemProps

-InsertTextMenuItemProps {
-  aria-label?: string
-  children: ReactNode
-  id?: Key
-  isDisabled?: boolean
-  onAction?: () => void
-  onBlur?: (FocusEvent<Target>) => void
-  onFocus?: (FocusEvent<Target>) => void
-  onFocusChange?: (boolean) => void
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  shouldCloseOnSelect?: boolean
-  styles?: StylesProp
-  textValue?: string
-  value?: T
-}

/@react-spectrum/ai:CommandMenuItemProps

-CommandMenuItemProps {
-  aria-label?: string
-  children: ReactNode
-  id?: Key
-  isDisabled?: boolean
-  onAction?: () => void
-  onBlur?: (FocusEvent<Target>) => void
-  onFocus?: (FocusEvent<Target>) => void
-  onFocusChange?: (boolean) => void
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  shouldCloseOnSelect?: boolean
-  styles?: StylesProp
-  textValue?: string
-  value?: T
-}

/@react-spectrum/ai:MessageFeedbackProps

 MessageFeedbackProps {
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   defaultValue?: MessageFeedbackValue
   id?: string
   isDisabled?: boolean
   onChange?: (MessageFeedbackValue) => void
-  size?: 'XS' | 'S' | 'M' | 'L' | 'XL' = 'M'
   slot?: string | null
   styles?: StylesPropWithHeight
   thumbDownLabel?: string
   thumbUpLabel?: string
 }

/@react-spectrum/ai:ExecutionTraceProps

-ExecutionTraceProps {
-  aria-describedby?: string
-  aria-details?: string
-  aria-label?: string
-  aria-labelledby?: string
-  children: ReactNode
-  id?: string
-  styles?: StyleString
-}

/@react-spectrum/ai:ExecutionTraceItemProps

-ExecutionTraceItemProps {
-  aria-describedby?: string
-  aria-details?: string
-  aria-label?: string
-  aria-labelledby?: string
-  children: ReactNode
-  detail?: ReactNode
-  icon?: ReactNode
-  id?: string
-  isAlwaysOpen?: boolean
-  styles?: StyleString
-}

/@react-spectrum/ai:ResponseStatusProps

 ResponseStatusProps {
   children: ReactNode
   defaultExpanded?: boolean
+  density?: 'compact' | 'regular' | 'spacious' = 'regular'
   id?: Key
   isDisabled?: boolean
   isExpanded?: boolean
+  isLoading?: boolean
   onExpandedChange?: (boolean) => void
+  size?: 'S' | 'M' | 'L' | 'XL' = 'M'
   slot?: string | null
-  status?: 'loading' | 'failed' | 'success' = 'loading'
   styles?: StyleString
 }

/@react-spectrum/ai:ThreadProps

 ThreadProps <T extends {}> {
   aria-label?: string
   aria-labelledby?: string
   children?: ReactNode | (T) => ReactNode
   items?: Iterable<T>
-  scrollEndThreshold?: number = 100
   styles?: StyleString
 }

/@react-spectrum/ai:ThreadItemProps

 ThreadItemProps {
   allowsArrowNavigation?: boolean
   children?: ChildrenOrFunction<GridListItemRenderProps>
   focusMode?: 'child' | 'row'
-  id?: Key
   isStreaming?: boolean
   shouldAnnounceOnMount?: boolean
   styles?: StyleString
   textValue?: string

/@react-spectrum/ai:ThreadLoadMoreItemProps

-ThreadLoadMoreItemProps {
-  children?: ReactNode
-  className?: string = 'react-aria-GridListLoadMoreItem'
-  isLoading?: boolean
-  onLoadMore?: () => any
-  render?: DOMRenderFunction<keyof React.JSX.IntrinsicElements, undefined>
-  scrollOffset?: number = 1
-  style?: CSSProperties
-}

/@react-spectrum/ai:PixelLoaderProps

-PixelLoaderProps {
-  className?: string
-  color?: string = 'currentColor'
-  icon?: Array<Cell> | Array<Array<Cell>>
-  isPlaying?: boolean
-  size?: number
-}

@react-spectrum/s2

/@react-spectrum/s2:SideNav

-SideNav <T> {
-  UNSAFE_className?: UnsafeClassName
-  UNSAFE_style?: CSSProperties
-  aria-describedby?: string
-  aria-details?: string
-  aria-label?: string
-  aria-labelledby?: string
-  autoFocus?: boolean | FocusStrategy
-  children?: ReactNode | (T) => ReactNode
-  defaultExpandedKeys?: Iterable<Key>
-  dependencies?: ReadonlyArray<any>
-  disabledKeys?: Iterable<Key>
-  expandedKeys?: Iterable<Key>
-  id?: string
-  items?: Iterable<T>
-  onExpandedChange?: (Set<Key>) => any
-  selectedRoute?: string | null
-  slot?: string | null
-  styles?: StylesPropWithHeight
-}

/@react-spectrum/s2:SideNavItem

-SideNavItem {
-  aria-label?: string
-  children: ReactNode
-  download?: boolean | string
-  hasChildItems?: boolean
-  href?: Href
-  hrefLang?: string
-  id?: Key
-  isDisabled?: boolean
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  ping?: string
-  referrerPolicy?: HTMLAttributeReferrerPolicy
-  rel?: string
-  routerOptions?: RouterOptions
-  target?: HTMLAttributeAnchorTarget
-  textValue: string
-}

/@react-spectrum/s2:SideNavItemContent

-SideNavItemContent {
-  children: ReactNode
-}

/@react-spectrum/s2:SideNavItemLink

-SideNavItemLink {
-  children?: ReactNode
-}

/@react-spectrum/s2:SideNavSection

-SideNavSection <T extends {}> {
-  aria-label?: string
-  children?: ReactNode | (T) => ReactElement
-  dependencies?: ReadonlyArray<any>
-  id?: Key
-  items?: Iterable<T>
-}

/@react-spectrum/s2:SideNavHeader

-SideNavHeader {
-  children?: ReactNode
-  id?: string
-}

/@react-spectrum/s2:PopoverProps

 PopoverProps {
   UNSAFE_className?: UnsafeClassName
   UNSAFE_style?: CSSProperties
   aria-describedby?: string
   aria-details?: string
   aria-label?: string
   aria-labelledby?: string
   arrowRef?: RefObject<Element | null>
   boundaryElement?: Element = document.body
   children?: ChildrenOrFunction<PopoverRenderProps>
   containerPadding?: number = 12
   crossOffset?: number = 0
   defaultOpen?: boolean
   getTargetRect?: (Element) => DOMRect | null | undefined = target.getBoundingClientRect()
   hideArrow?: boolean = false
   isEntering?: boolean
   isExiting?: boolean
   isNonModal?: boolean
   isOpen?: boolean
   maxHeight?: number
   offset?: number = 8
   onBlurWithin?: (FocusEvent) => void
   onFocusWithin?: (FocusEvent) => void
   onFocusWithinChange?: (boolean) => void
   onOpenChange?: (boolean) => void
   placement?: Placement = 'bottom'
   scrollRef?: RefObject<Element | null> = overlayRef
   shouldFlip?: boolean = true
+  shouldSkipAnimation?: boolean
   size?: 'S' | 'M' | 'L'
   slot?: string | null
   styles?: StyleString
   trigger?: string
 }

/@react-spectrum/s2:SideNavProps

-SideNavProps <T> {
-  UNSAFE_className?: UnsafeClassName
-  UNSAFE_style?: CSSProperties
-  aria-describedby?: string
-  aria-details?: string
-  aria-label?: string
-  aria-labelledby?: string
-  autoFocus?: boolean | FocusStrategy
-  children?: ReactNode | (T) => ReactNode
-  defaultExpandedKeys?: Iterable<Key>
-  dependencies?: ReadonlyArray<any>
-  disabledKeys?: Iterable<Key>
-  expandedKeys?: Iterable<Key>
-  id?: string
-  items?: Iterable<T>
-  onExpandedChange?: (Set<Key>) => any
-  selectedRoute?: string | null
-  slot?: string | null
-  styles?: StylesPropWithHeight
-}

/@react-spectrum/s2:SideNavItemProps

-SideNavItemProps {
-  aria-label?: string
-  children: ReactNode
-  download?: boolean | string
-  hasChildItems?: boolean
-  href?: Href
-  hrefLang?: string
-  id?: Key
-  isDisabled?: boolean
-  onHoverChange?: (boolean) => void
-  onHoverEnd?: (HoverEvent) => void
-  onHoverStart?: (HoverEvent) => void
-  onPress?: (PressEvent) => void
-  onPressChange?: (boolean) => void
-  onPressEnd?: (PressEvent) => void
-  onPressStart?: (PressEvent) => void
-  onPressUp?: (PressEvent) => void
-  ping?: string
-  referrerPolicy?: HTMLAttributeReferrerPolicy
-  rel?: string
-  routerOptions?: RouterOptions
-  target?: HTMLAttributeAnchorTarget
-  textValue: string
-}

/@react-spectrum/s2:SideNavItemContentProps

-SideNavItemContentProps {
-  children: ReactNode
-}

/@react-spectrum/s2:SideNavItemLinkProps

-SideNavItemLinkProps {
-  children?: ReactNode
-}

/@react-spectrum/s2:SideNavSectionProps

-SideNavSectionProps <T> {
-  aria-label?: string
-  children?: ReactNode | (T) => ReactElement
-  dependencies?: ReadonlyArray<any>
-  id?: Key
-  items?: Iterable<T>
-}

/@react-spectrum/s2:SideNavHeaderProps

-SideNavHeaderProps {
-  children?: ReactNode
-  id?: string
-}

@react-stately/virtualizer

/@react-stately/virtualizer:InvalidationContext

 InvalidationContext <O = any> {
   contentChanged?: boolean
-  heightChanged?: boolean
   itemSizeChanged?: boolean
   layoutOptions?: O
   layoutOptionsChanged?: boolean
   offsetChanged?: boolean
   sizeChanged?: boolean
-  widthChanged?: boolean
 }

@rspbot

rspbot commented Aug 4, 2026

Copy link
Copy Markdown

Agent Skills Changes

Removed (97)
  • react-aria/skills/react-aria/references/components/Breadcrumbs/useBreadcrumbs.md
  • react-aria/skills/react-aria/references/components/Button/useButton.md
  • react-aria/skills/react-aria/references/components/Calendar/useCalendar.md
  • react-aria/skills/react-aria/references/components/Checkbox/useCheckbox.md
  • react-aria/skills/react-aria/references/components/CheckboxGroup/useCheckboxGroup.md
  • react-aria/skills/react-aria/references/components/ColorArea/useColorArea.md
  • react-aria/skills/react-aria/references/components/ColorField/useColorField.md
  • react-aria/skills/react-aria/references/components/ColorSlider/useColorSlider.md
  • react-aria/skills/react-aria/references/components/ColorSwatch/useColorSwatch.md
  • react-aria/skills/react-aria/references/components/ColorWheel/useColorWheel.md
  • react-aria/skills/react-aria/references/components/ComboBox/useComboBox.md
  • react-aria/skills/react-aria/references/components/DateField/useDateField.md
  • react-aria/skills/react-aria/references/components/DatePicker/useDatePicker.md
  • react-aria/skills/react-aria/references/components/DateRangePicker/useDateRangePicker.md
  • react-aria/skills/react-aria/references/components/Disclosure/useDisclosure.md
  • react-aria/skills/react-aria/references/components/GridList/useGridList.md
  • react-aria/skills/react-aria/references/components/Link/useLink.md
  • react-aria/skills/react-aria/references/components/ListBox/useListBox.md
  • react-aria/skills/react-aria/references/components/Menu/useMenu.md
  • react-aria/skills/react-aria/references/components/Meter/useMeter.md
  • react-aria/skills/react-aria/references/components/Modal/useModalOverlay.md
  • react-aria/skills/react-aria/references/components/NumberField/useNumberField.md
  • react-aria/skills/react-aria/references/components/Popover/usePopover.md
  • react-aria/skills/react-aria/references/components/ProgressBar/useProgressBar.md
  • react-aria/skills/react-aria/references/components/RadioGroup/useRadioGroup.md
  • react-aria/skills/react-aria/references/components/RangeCalendar/useRangeCalendar.md
  • react-aria/skills/react-aria/references/components/SearchField/useSearchField.md
  • react-aria/skills/react-aria/references/components/Select/useSelect.md
  • react-aria/skills/react-aria/references/components/Separator/useSeparator.md
  • react-aria/skills/react-aria/references/components/Slider/useSlider.md
  • react-aria/skills/react-aria/references/components/Switch/useSwitch.md
  • react-aria/skills/react-aria/references/components/Table/useTable.md
  • react-aria/skills/react-aria/references/components/Tabs/useTabList.md
  • react-aria/skills/react-aria/references/components/TagGroup/useTagGroup.md
  • react-aria/skills/react-aria/references/components/TextField/useTextField.md
  • react-aria/skills/react-aria/references/components/TimeField/useTimeField.md
  • react-aria/skills/react-aria/references/components/Toast/useToast.md
  • react-aria/skills/react-aria/references/components/ToggleButton/useToggleButton.md
  • react-aria/skills/react-aria/references/components/ToggleButtonGroup/useToggleButtonGroup.md
  • react-aria/skills/react-aria/references/components/Toolbar/useToolbar.md
  • react-aria/skills/react-aria/references/components/Tooltip/useTooltipTrigger.md
  • react-aria/skills/react-aria/references/guides/hooks.md
  • react-aria/skills/react-aria/references/interactions/useDraggableCollection.md
  • react-aria/skills/react-aria/references/interactions/useDroppableCollection.md
  • react-aria/skills/react-aria/references/utilities/useAsyncList.md
  • react-aria/skills/react-aria/references/utilities/useListData.md
  • react-aria/skills/react-aria/references/utilities/useListFormatter.md
  • react-aria/skills/react-aria/references/utilities/useTreeData.md
  • s2/skills/react-spectrum-s2/references/components/SideNav.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Breadcrumbs/useBreadcrumbs.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Button/useButton.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Calendar/useCalendar.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Checkbox/useCheckbox.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/CheckboxGroup/useCheckboxGroup.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ColorArea/useColorArea.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ColorField/useColorField.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ColorSlider/useColorSlider.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ColorSwatch/useColorSwatch.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ColorWheel/useColorWheel.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ComboBox/useComboBox.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/DateField/useDateField.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/DatePicker/useDatePicker.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/DateRangePicker/useDateRangePicker.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Disclosure/useDisclosure.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/GridList/useGridList.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Link/useLink.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ListBox/useListBox.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Menu/useMenu.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Meter/useMeter.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Modal/useModalOverlay.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/NumberField/useNumberField.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Popover/usePopover.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ProgressBar/useProgressBar.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/RadioGroup/useRadioGroup.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/RangeCalendar/useRangeCalendar.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/SearchField/useSearchField.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Select/useSelect.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Separator/useSeparator.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Slider/useSlider.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Switch/useSwitch.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Table/useTable.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Tabs/useTabList.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/TagGroup/useTagGroup.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/TextField/useTextField.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/TimeField/useTimeField.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Toast/useToast.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ToggleButton/useToggleButton.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/ToggleButtonGroup/useToggleButtonGroup.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Toolbar/useToolbar.md
  • s2/skills/react-spectrum-s2/references/react-aria/components/Tooltip/useTooltipTrigger.md
  • s2/skills/react-spectrum-s2/references/react-aria/guides/hooks.md
  • s2/skills/react-spectrum-s2/references/react-aria/interactions/useDraggableCollection.md
  • s2/skills/react-spectrum-s2/references/react-aria/interactions/useDroppableCollection.md
  • s2/skills/react-spectrum-s2/references/react-aria/utilities/useAsyncList.md
  • s2/skills/react-spectrum-s2/references/react-aria/utilities/useListData.md
  • s2/skills/react-spectrum-s2/references/react-aria/utilities/useListFormatter.md
  • s2/skills/react-spectrum-s2/references/react-aria/utilities/useTreeData.md
Modified (57)
Install

React Spectrum S2:

npx skills add https://d1pzu54gtk2aed.cloudfront.net/pr/1f2908319fea4a85aa6a16cced1291bf81ccaf9d/

React Aria:

npx skills add https://d5iwopk28bdhl.cloudfront.net/pr/1f2908319fea4a85aa6a16cced1291bf81ccaf9d/

Comment thread CONTRIBUTING.md
* **Fast** — must run well on constrained CPU and memory, not just the latest MacBook Pro. Many users are on years-old, low-end Android devices.
* **Mindful of the shared environment** — keep the global namespace clean, don't hog resources or throw uncaught errors, avoid CSS that leaks across boundaries, and keep ids unique.
* **Stable** — RSP and Quarry are libraries with many downstream dependents who upgrade on their own schedule, so avoid breaking them.
* **Accessible** — accessibility is still a relatively new web requirement, so strong examples are scarce and bad ones are common. use other examples in the repo or the APG examples first.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* **Accessible** — accessibility is still a relatively new web requirement, so strong examples are scarce and bad ones are common. use other examples in the repo or the APG examples first.
* **Accessible** — accessibility is still a relatively new web requirement, so strong examples are scarce and bad ones are common. Use other examples in the repo or the APG examples first.

Comment thread CLAUDE.md
- **`@internationalized/*` and `@react-stately/*`** — the two lowest levels (i18n utilities and state management).
- **`@react-aria/*`** — behavior and accessibility hooks built on the above.
- **`react-aria-components` (RAC)** and some **React Spectrum v3 (RSP)** — component layer built on the hooks.
- **RSP S2 (`@react-spectrum/s2`)** — the Spectrum 2 design system, the highest level.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mention built on RAC?

Comment thread CONTRIBUTING.md


## AI-assisted contributions
Setting expectations: the AI doesn't contribute to React Spectrum or Quarry, you do. The AI is a tool, but you are still the author, and you own every line, every decision, and every explanation.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove Quarry mention?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants